#include "fxcc/core/audio/common/AudioLoader.h"
#include "fxcc/core/audio/common/Impl.h"

std::unordered_map<std::string, std::shared_ptr<fxcc::audio::common::Source>> AudioLoader::m_Audios;

bool AudioLoader::InitWorld()
{
    fxcc::audio::common::Impl::initWorld();
    return true;
}

bool AudioLoader::LoadFile(const fxcc::File& file)
{
    switch (file.m_FileType)
    {
    case fxcc::_Ogg_:
        return LoadOggFile(file).get();
    default:
        return false;
    }
}

std::shared_ptr<fxcc::audio::common::Source> AudioLoader::LoadOggFile(const fxcc::File& file)
{
    std::string path = file.m_RelativePath;
    return LoadOggFile(path);

}

std::shared_ptr<fxcc::audio::common::Source> AudioLoader::LoadOggFile(const std::string& path)
{
    auto it = m_Audios.find(path);

    if (it != m_Audios.end())
    {
        return it->second;
    }

    fxcc::audio::common::Source::Desc desc;
    desc.m_OggPath = path;
    desc.m_Type = fxcc::audio::common::Source::Desc::Type::_Ogg_;

    //auto inst = std::make_shared<fxcc::audio::common::Source>(desc);
    auto inst = fxcc::audio::common::Impl::CreateAudio(desc);
    m_Audios[path] = inst;
    return inst;
}
